package com.demo.jzoffer2;

import org.junit.Test;

/**
 * @author gy
 * @date 2022/11/15
 */
public class Test1227_04 {

    /**
     * 数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
     *
     * 你可以假设数组是非空的，并且给定的数组总是存在多数元素。
     *
     * 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
     * 输出: 2
     * @param nums
     * @return
     */
    public int majorityElement(int[] nums) {
        // 投票对拼消耗算法
        // 初始化 众数、票数
        int x = 1;
        int vote = 0;
        for (int num : nums) {
            // 选票和如果为0
            // 1、将当前元素 设定为 众数
            // 2、选票数 + 1
            if (vote == 0){
                x = num;
            }
            if (num == x){
                vote ++;
            }else{
                vote --;
            }
        }
        return x;
    }


    @Test
    public void m1() {

    }

}
